numpy 返回上三角矩阵但不包括对角元素 | 您所在的位置:网站首页 › numpy 拉成一维 › numpy 返回上三角矩阵但不包括对角元素 |
今天想把课题的(700,700)的标签矩阵取上三角元素但不包含对角元素,如下图所示,左边方框里的内容为下标,右边的是想将左边的元素存入右边一列。 然后我就尝试将二维数组的下标与一维数组的下标一一映射,奈何我表示不出来呀。 想了好久,最后还是放弃了用i,j表示一维数组的索引,另辟蹊径,重新定一个变量保存一维数组的索引。于是就成功的解决了将上三角元素不包含对角元素存入一维数组里。 #!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2020/11/22 14:30 # @Author : Qiufen.Chen # @Email : [email protected] # @File : triu.py # @Software: PyCharm """numpy 保存上三角矩阵不包括对角元素""" import numpy as np import os path = '/home/cqfnenu/LSTM/data/700/lable_data/' save_path = '/home/cqfnenu/LSTM/data/700/new_lable_data' path_list=os.listdir(path) path_list.sort() # 排序 for file_name in path_list: lable = np.load(os.path.join(path, file_name)) new_array = np.zeros((244650,1)) # 共244650行 每行1列 初值为0 v = 0 for a in range(lable.shape[0]): for b in range(lable.shape[1]): if b>a: new_array[v] = lable[a][b] v += 1 print(new_array[:100]) # 查看前100个元素 result = new_array.reshape((350,699)) np.save(save_path + '/' + str((file_name).split('.')[0]), result)-------------------------------------------------------------------------------------------------------------------------------------------- 注:由于我的lable矩阵的shape是(700,700),取对角线上以上的元素总共有:700*(700-1)/2 = 244650 思路:①先定义一个(244650,1)大小的零矩阵 ②再将所需要的元素存入该零矩阵中; ③最后reshape成(350,699),保存文件。 -------------------------------------------------------------------------------------------------------------------------------------------- 如果是numpy直接获取上三角元素的话,可以用下面的代码实现: lable = np.load(os.path.join(path, file_name)) triu_array = np.triu(lable) # 取上三角函数 tril_array = np.tril(lable) # 取下三角函数参考:(1)numpy.triu — NumPy v1.19 Manual (2)numpy.tril — NumPy v1.19 Manual |
CopyRight 2018-2019 实验室设备网 版权所有 |